package dailytest;

import cn.hutool.core.date.DateUtil;
import entity.MedicationDealVO;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.StringUtils;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author: heweiwei
 * @Date: 2022/6/13 11:32
 * @Desc:
 */
public class ListTest {

    public static void main(String[] args) {

        MedicationDealVO dv1 = new MedicationDealVO(DateUtil.parse("2025-01-19 11:32:20", "yyyy-MM-dd HH:mm:ss"), false, "hww", "1", 1);
        MedicationDealVO dv2 = new MedicationDealVO(DateUtil.parse("2025-01-10 11:32:20", "yyyy-MM-dd HH:mm:ss"), false, null, "2", 1);
        MedicationDealVO dv3 = new MedicationDealVO(DateUtil.parse("2025-01-11 11:32:20", "yyyy-MM-dd HH:mm:ss"), false, null, "3", 1);
        MedicationDealVO dv4 = new MedicationDealVO(DateUtil.parse("2025-01-12 11:32:20", "yyyy-MM-dd HH:mm:ss"), false, "hww", "30", 1);
        MedicationDealVO dv5 = new MedicationDealVO(DateUtil.parse("2025-01-13 11:32:20", "yyyy-MM-dd HH:mm:ss"), true, "hww", "30", 2);
        MedicationDealVO dv6 = new MedicationDealVO(DateUtil.parse("2025-01-14 11:32:20", "yyyy-MM-dd HH:mm:ss"), true, null, "31", 2);
        MedicationDealVO dv7 = new MedicationDealVO(DateUtil.parse("2025-01-14 11:32:20", "yyyy-MM-dd HH:mm:ss"), false, null, "31", 1);

        List<MedicationDealVO> list = Arrays.asList( dv7,dv1, dv2, dv3, dv4, dv5, dv6);


        List<MedicationDealVO> havePatrolList = list.stream().filter(item -> StringUtils.isNotBlank(item.getPatrolpeopleStr())).collect(Collectors.toList());

        List<MedicationDealVO> collectHave= havePatrolList.stream().sorted(Comparator.comparing(MedicationDealVO::getExecutivePlanDate)
                .thenComparing(MedicationDealVO::getOrderGroupNoUuid).thenComparing((v1, v2) -> {
                    // 如果 v1 的 groupItem 为 true，v2 的 groupItem 为 false，则 v1 应该排在 v2 后面
                    if (v1.getGroupItem() && !v2.getGroupItem()) {
                        return 1;
                    }
                    // 如果 v1 的 groupItem 为 false，v2 的 groupItem 为 true，则 v1 应该排在 v2 前面
                    if (!v1.getGroupItem() && v2.getGroupItem()) {
                        return -1;
                    }
                    // 如果 v1 和 v2 的 groupItem 相同，则它们的顺序不变
                    return 0;
                })).collect(Collectors.toList());

        List<MedicationDealVO> noPatrolList = list.stream().filter(item -> StringUtils.isBlank(item.getPatrolpeopleStr())).collect(Collectors.toList());

        List<MedicationDealVO> collectNo = noPatrolList.stream().sorted(Comparator.comparing(MedicationDealVO::getExecutivePlanDate)
                .thenComparing(MedicationDealVO::getOrderGroupNoUuid).thenComparing((v1, v2) -> {
                    // 如果 v1 的 groupItem 为 true，v2 的 groupItem 为 false，则 v1 应该排在 v2 后面
                    if (v1.getGroupItem() && !v2.getGroupItem()) {
                        return 1;
                    }
                    // 如果 v1 的 groupItem 为 false，v2 的 groupItem 为 true，则 v1 应该排在 v2 前面
                    if (!v1.getGroupItem() && v2.getGroupItem()) {
                        return -1;
                    }
                    // 如果 v1 和 v2 的 groupItem 相同，则它们的顺序不变
                    return 0;
                })).collect(Collectors.toList());

        List<MedicationDealVO> total=new ArrayList<>();

        if (CollectionUtils.isNotEmpty(collectNo)) {
            total.addAll(collectNo);
        }
        if (CollectionUtils.isNotEmpty(collectHave)) {
            total.addAll(collectHave);
        }

        for (MedicationDealVO dealVO : total) {
            System.out.println("dealVO = " + dealVO);
        }


    }

}
